package com.demo.java.OD51_100.OD80;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【水仙花数】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/145621688
 */
public class OdMain {
    // 定义一个方法check，用于判断一个数是否是水仙花数
    private static boolean check(int num) {
        int tmp = num;
        int sum = 0;

        // 对num进行逐位拆分并计算每一位的立方和
        while (0 < tmp) {
            int a = tmp % 10; // 取出当前数字的最后一位
            sum += a * a * a; // 计算该位数的立方并累加
            tmp /= 10; // 去掉最后一位
        }

        // 判断累加的立方和是否等于原数
        return sum == num;
    }

    public static void main(String[] args) {
        try {
            // 创建Scanner对象，用于从输入读取数据
            Scanner s = new Scanner(System.in);

            // 读取两个整数n和m
            int n = Integer.parseInt(s.nextLine()); // 位数n
            int m = Integer.parseInt(s.nextLine()); // 第m个水仙花数

            // 如果n小于3或者大于7，输出-1并返回
            if (n > 7 || n < 3) {
                System.out.println(-1);
                return;
            }

            // 计算n位数的起始范围
            int begin = 1;
            for (int j = 1; j < n; j++) {
                begin *= 10; // 计算n位数的最小值
            }

            // 计算n位数的最大范围
            int end = begin * 10 - 1; // 例如，3位数的范围是100到999

            int count = 0; // 计数器，用来记录找到的水仙花数个数

            // 从n位数的最小值开始遍历到n位数的最大值
            for (int j = begin; j < end; j++) {
                if (check(j)) { // 如果j是水仙花数
                    if (count++ == m) { // 如果已经找到第m个水仙花数，输出该数
                        System.out.println(j);
                        return;
                    }
                }
            }

            // 如果遍历完所有n位数还是没有找到第m个水仙花数，输出-1
            System.out.println(-1);
        } catch (Exception e) {
            // 捕获异常并输出错误信息
            e.printStackTrace();
            System.out.println("false");
        }
    }
}
